#include <stdio.h>
#include <ncurses.h>
#include "Jeu.h"
#include "NcursJeu.h"

void NcursAff (WINDOW * win, const Jeu & j)
{
    wclear(win);
    int x,
    int y;
    const Terrain & ter;
    const Forme & form;
    ter = JeuGetConstTerrain(j);
    form = JeuGetConstForme(j);
    for(x=0; x<TerGetDimX(ter); x++)
    {
        for(y=0; y<TerGetDimY(ter); y++)
        {
            mvwprintw(win, TerGetDimY(ter)-1-y, x, "%d", TerGetXY(ter, x, y));
        }
    }
    mvwprintw(win, TerGetDimY(ter)-1-FormeGetPositionY(form), FormeGetPositionX(form), "*");
    wmove(win, TerGetDimY(ter)-1-FormeGetPositionY(form), FormeGetPositionX(form));
}

void NcursBoucle (Jeu & jeu)
{
    WINDOW * win;
    int c;
    bool ok;
    initscr(); /// passe l'écran texte en mode NCurses
    clear(); /// efface l'écran
    noecho(); /// lorsqu'une touche est préssée au clavier, elle n'apparait pas à l'écran
    cbreak(); /// un caractère est directement affiché, il ne passe pas dans un buffer
    nodelay(); /// wgetch à un appel non bloquant
    /// création d'une nouvelle fenêtre en mode texte
    /// => fenètre de dimension et position (WIDTH, HEIGHT, STARTX, STARTY)
    win = newwin(TerGetDimY(JeuGetConstTerrain(jeu)), TerGetDimX(JeuGetConstTerrain(jeu)), 10, 5);
    keypad(win, TRUE); /// pour que les flèches soient traitées (il faut le faire après création de la fenêtre)
    ok = true;
    do
    {
        NcursAff(win, jeu);
        c = wgetch(win); /// récupère une touche au clavier
        switch (c)
        {
            case KEY_LEFT: JeuActionClavier(jeu, 'g');
                break;

            case KEY_RIGHT: JeuActionClavier(jeu, 'd');
                break;

            case KEY_UP: JeuActionClavier(jeu, 'p');
                break;

            case KEY_DOWN: JeuActionClavier(jeu, 'b');
                break;

            case 27: ok=false;
                break;
        }
    }
    while(ok);
    end win();
}
